package com.example.hcbmsm.util;

import com.auth0.jwt.JWT;
import com.auth0.jwt.JWTCreator;
import com.auth0.jwt.algorithms.Algorithm;
import com.auth0.jwt.interfaces.Claim;
import com.auth0.jwt.interfaces.DecodedJWT;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;

import javax.crypto.spec.SecretKeySpec;
import javax.xml.bind.DatatypeConverter;
import java.security.Key;
import java.util.Calendar;
import java.util.Map;

/**
 * @author Xinghm
 * @version 1.0
 * @since 2024/10/10 23:34
 */
public class JavaWebToken {
    private static String secret = "0987byud64wev;uo98667e";
    public static String getToken(Map<String,String> map){
        JWTCreator.Builder builder = JWT.create();
        // 设置客户的payload
        map.forEach(builder::withClaim);
        // 获取过期时间
        Calendar instance = Calendar.getInstance(); // 获取当前系统时间
        instance.add(Calendar.SECOND, 60 * 60 * 3);
        // 设置过期时间
        builder.withExpiresAt(instance.getTime());
        // 生成token
        return builder.sign(Algorithm.HMAC256(secret));
    }

    // 验证token的合法性
    // 如果没有异常说明校验通过，信息被修改和过期分别会抛出不同的异常。
    public static DecodedJWT checkToken(String token){
        return JWT.require(Algorithm.HMAC256(secret)).build().verify(token);
    }

    /**
     * 获取token中的数据信息
     * @param token
     * @return
     */
    public static Map<String, Claim> getTokenInfo(String token){
        return JWT.require(Algorithm.HMAC256(secret)).build().verify(token).getClaims();
    }
}
